import axios from "axios";

// 【1】封装方式
const myAxios1 = (url, params) => {
    console.log("Passed params:", params); // 检查传入的params
    params = params || {};
    console.log("myAxios",url, params)
    return new Promise((resolve, reject) => {
        axios.get(url,{params})
        .then(res => {
            console.log("myAxios - then res",res);
            if (res.status === 200) {
                resolve(res.data)
            }
        }).catch(err => {
            reject(err)
        })
    })
}
// 【2】封装方式
const myAxios2 = axiosConfig => {
    console.log("myAxios2 axiosConfig",axiosConfig)
    //创建实例
    const instance = axios.create({
        baseURL: "/api",
        timeout: 5000,
    })
    
    // 添加请求拦截器
    instance.interceptors.request.use(function (config) {
        // 在发送请求之前做些什么
        console.log("myAxios2 request config",config)
        return config;
    }, function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
    });

    // 添加响应拦截器
    instance.interceptors.response.use(function (response) {
        // 对响应数据做点什么
        console.log("myAxios2 response response",response)
        return response;
    }, function (error) {
        // 对响应错误做点什么
        return Promise.reject(error);
    });
    //返回实例
    return instance(axiosConfig)
}


// 【3】封装方式
const myAxios3 = (url,ops = {}) => {
    // 默认的配置项
    const defaultOps = {
        method:'get',
        timeout:5000,
    }
    // 合并配置项
    // Object.assign函数key名相同的情况下，会被直接覆盖
    const newOps = Object.assign(defaultOps,ops)

    return new Promise((resolve, reject) => {
        axios({
            url,
            method:newOps.method,
            params:newOps.params,
            data:newOps.data,
            timeout:newOps.timeout
        }).then(res => {
            if(res.status === 200) {
                resolve(res.data)

            }
        }).catch(err => {
            reject(err)
        })
    })
}
// 或者一次性导出多个函数
export { myAxios1, myAxios2 ,myAxios3};